home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / hd_installers / turrican2hd / src / readturr2disk.asm < prev    next >
Assembly Source File  |  1999-02-08  |  1KB  |  55 lines

  1. ; Turrican 2 disk image reader
  2.     include    diskreader.asm
  3.  
  4. ; tracks 0-1: dos tracks (5632 bytes each)
  5.  
  6.     WRITEDOS #0
  7.     WRITEDOS #1
  8.  
  9. ; tracks 2-159:
  10. ; - $9521 MFM sync
  11. ; - unused byte (encoded as 2 bytes MFM)
  12. ; - 6800 bytes of data (stored as 1700 8-byte MFM encoded longwords)
  13. ; - longword checksum as XOR of all preceding raw MFM data (encoded as MFM long)
  14.  
  15.     moveq    #2,d7    ; d7 = tracknumber
  16. .nxttrk    RAWREAD    d7    ; read track
  17.     RESYNC    #$9521    ; resync track
  18.  
  19.     lea    TRACKBUFFER,a0    ; beginning of buffer
  20.     lea    4(a0),a1    ; beginning of data in buffer
  21.  
  22.     move.w    #(6800/4)-1,d0
  23.     moveq    #0,d3        ; accumulated checksum
  24.     move.l    #$55555555,d4    ; 0101010101010...
  25. .decode    movem.l    (a1)+,d1/d2    ; read 8-byte MFM encoded long
  26.     eor.l    d1,d3        ; checksum raw MFM data
  27.     eor.l    d2,d3
  28.     and.l    d4,d1        ; decode MFM long
  29.     and.l    d4,d2
  30.     add.l    d1,d1
  31.     or.l    d2,d1
  32.     move.l    d1,(a0)+    ; write long
  33.     dbra    d0,.decode
  34.  
  35.     movem.l    (a1)+,d1/d2    ; get stored checksum
  36.     and.l    d4,d1        ; decode
  37.     and.l    d4,d2
  38.     add.l    d1,d1
  39.     or.l    d2,d1
  40.  
  41.     cmp.l    d1,d3        ; verify checksum
  42.     beq.s    .ok
  43.     FAILURE    cksum(pc)
  44.  
  45. .ok    WRITE    #6800
  46.  
  47.     addq.w    #1,d7
  48.     cmp.w    #160,d7
  49.     bne.s    .nxttrk
  50.     rts
  51.  
  52. cksum    dc.b    'bad checksum',0
  53.  
  54.     MAKEBUF TRACKBUFFER
  55.